package co.edu.uniquindio.ejb;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import co.edu.uniquindio.dao.OfertaDao;
import co.edu.uniquindio.dao.SubHolandesaDao;
import co.edu.uniquindio.dao.SubInglesaDao;
import co.edu.uniquindio.dao.SubSilenciosaDao;
import co.edu.uniquindio.dao.VendedorDao;
import co.edu.uniquindio.ejbremotos.SubastaEjbRemote;
import co.edu.uniquindio.logica.SubHolandesa;
import co.edu.uniquindio.logica.SubInglesa;
import co.edu.uniquindio.logica.SubSilenciosa;
import co.edu.uniquindio.logica.Subasta;
import co.edu.uniquindio.logica.Vendedor;

/**
 * Session Bean implementation class SubastaEjb
 * El proposito de esta clase es el proveer las funcionalidades
 * del aplicativo referentes a una subasta a las cuales tienen
 * acceso los usuarios ocultando la capa del nivel de persistencia 
 * del funcionamiento del aplicativo.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class SubastaEjb implements SubastaEjbRemote {

    @ EJB
	private OfertaDao oferta; 
    @EJB
	private SubHolandesaDao subHolandesaDao;
	@EJB
	private SubSilenciosaDao subSilenciosaDao;
	@EJB
	private SubInglesaDao subInglesaDao;
	/**
	 * este atributo es un instancia de la clase VendedorDao
	 */
	@EJB
	private VendedorDao vendedorDao;
    
	/**
	 * Este es el constructor por defecto de la clase SubastaEjb. 
	 */
    public SubastaEjb() {
        // TODO Auto-generated constructor stub
    }

    /**
     * este metodo permite crear una subasta inglesa
     * @param sub la subasta nueva
     * @param cedula la cedual del vendedor
     * @throws Exception
     */
    public void crearSubastaInglesa(SubInglesa sub)throws Exception
    {
    	SubInglesa subing=subInglesaDao.findByKey(sub.getNumSubasta());
    	if(subing==null)
    	 subInglesaDao.insert(sub);
    	else
    		throw new Exception("la subasta ya existe");
    }
    /**
     * este metodo permite crear una subasta holandesa
     * @param sub la subasta nueva
     * @param cedula la cedual del vendedor
     * @throws Exception
     */
    public void crearSubastaHolandesa(SubHolandesa sub)throws Exception
    {
    	SubHolandesa subing=subHolandesaDao.findByKey(sub.getNumSubasta());
    	if(subing==null)
    	 subHolandesaDao.insert(sub);
    	else
    		throw new Exception("la subasta ya existe");
    }
    /**
     * este metodo permite crear una subasta silenciosa
     * @param sub la subasta nueva
     * @param cedula la cedual del vendedor
     * @throws Exception
     */
    public void crearSubastaSilenciosa(SubSilenciosa sub)throws Exception
    {
    	SubSilenciosa subing=subSilenciosaDao.findByKey(sub.getNumSubasta());
    	if(subing==null)
    	 subSilenciosaDao.insert(sub);
    	else
    		throw new Exception("la subasta ya existe");
    }
    public void elminarSubasta(Subasta sub , String cedulaV)
    {
    	//TODO: preguntar si se puede hacer esta magia
    	if(sub instanceof SubHolandesa) // sub instance of 
    	{
    		Vendedor ven = vendedorDao.findByKey(cedulaV);
    		if(sub.getVendedor().equals(ven))
    		{
    			subInglesaDao.remove((SubInglesa)sub);
    		}
    	}
    		
    }
}
